#pragma once

#include <SDL.h>
#include <SDL_ttf.h>

/* Szkic klasy ekranu, właściwie jedynie interfejs, zadeklarowałbym jako abstract, ale C++ nie daje takiej możliwości */
class Screen {
	protected:
		SDL_Surface* screen; //powierzchnia ekranu (dostępna dla danej podklasy)
		int width; //szerokość ekranu
		int height; //wysokość ekranu
		
	public:
		/* Zwraca true, gdy P = (x, y) należy do prostokąta opisanego pozostałymi parametrami */
		inline bool static isPointInsideRect(int x, int y, int rectX, int rectY, int w, int h) {
			return x >= rectX && x <= rectX + w && y >= rectY && y <= rectY + h;
		}
	
	protected:
		bool DisplaySurface(SDL_Surface* image, int x, int y, SDL_Rect area);	
	
		/* Wyświetla część (bądź całość) obrazka
			x, y - współrzędne na ekranie
			imgX, imgY - wspórzędne na obrazku
			imgW, imgH - ile obrazka narysować (0, 0 oznacza, że cały) */
		bool DisplaySurface(SDL_Surface* image, int x, int y, int imgX = 0, int imgY = 0, int imgW = -1, int imgH = -1);
		
		/* Przygotowuje tekst */
		SDL_Surface* PrepareText(const char* text, TTF_Font* font, unsigned r, unsigned g, unsigned b);
		
		/* Wyświetla tekst */
		void WriteText(const char* text, SDL_Surface* screen, TTF_Font* font, unsigned x, unsigned y, unsigned r, unsigned g, unsigned b);
};

class CentreScreen : public Screen {
	protected:
		/* Wyświetla tekst */
		void WriteText(const char* text, SDL_Surface* screen, TTF_Font* font, unsigned x, unsigned y, unsigned r, unsigned g, unsigned b);
};
